package com.design.android.personnel.database;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import androidx.annotation.NonNull;

import java.io.Serializable;

/**
 * 基本数据库操作抽象类
 *
 * @author admin
 */
public abstract class BaseDatabaseOperate<T extends Serializable> {

    protected SQLiteDatabase database;
    protected DatabaseOpenHelper dbOpenHelper;

    public BaseDatabaseOperate(@NonNull Context context) {
        this.dbOpenHelper = new DatabaseOpenHelper(context);
    }

    public void open() {
        try {
            database = dbOpenHelper.getWritableDatabase();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void close() {
        try {
            database.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 新增数据
     *
     * @param t 实例对象
     */
    public abstract void add(@NonNull T t);

    /**
     * 删除数据
     *
     * @param id 数据的主键 id
     */
    public abstract void delete(@NonNull Integer id);

    /**
     * 更新数据
     *
     * @param t 实例对象
     */
    public abstract void update(@NonNull T t);

    /**
     * 查询指定 id 的数据
     *
     * @param id 数据的主键 id
     * @return <T> 单个查询结果
     */
    public abstract T select(@NonNull Integer id);
}
